/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cids.custom.switchon.gui.utils; import Sirius.navigator.connection.SessionManager; import Sirius.server.middleware.types.MetaClass; import Sirius.server.middleware.types.MetaObject; import org.apache.commons.lang.StringUtils; import java.awt.Component; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListCellRenderer; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import de.cismet.cids.navigator.utils.ClassCacheMultiple; /** * DOCUMENT ME! * * @author Gilles Baatz * @version $Revision$, $Date$ */ public class QueryComboBox extends JComboBox { //~ Static fields/initializers --------------------------------------------- private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(QueryComboBox.class); //~ Instance fields -------------------------------------------------------- private final boolean nullable; private String metaClassName; //~ Constructors ----------------------------------------------------------- /** * Creates a new QueryComboBox object. * * @param query DOCUMENT ME! * @param metaClassName DOCUMENT ME! */ public QueryComboBox(final String query, final String metaClassName) { this(query, true, metaClassName); } /** * Creates a new QueryComboBox object. * * @param query DOCUMENT ME! * @param nullable DOCUMENT ME! * @param metaClassName DOCUMENT ME! */ public QueryComboBox(final String query, final boolean nullable, final String metaClassName) { super(); this.nullable = nullable; this.metaClassName = metaClassName; // if value null then show a message final DefaultListCellRenderer cellRenderer = new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(final JList<?> list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { final Component c = super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus); if (value == null) { ((JLabel)c).setText("None"); } return c; } }; this.setRenderer(cellRenderer); if (StringUtils.isBlank(query)) { final DefaultComboBoxModel<MetaObject> model = new DefaultComboBoxModel<MetaObject>(); this.setModel(model); } else { executeQueryAndSetModel(query); } } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param query DOCUMENT ME! */ public final void executeQueryAndSetModel(final String query) { final DefaultComboBoxModel<MetaObject> model = new DefaultComboBoxModel<MetaObject>(); try { final MetaClass mc = ClassCacheMultiple.getMetaClass("SWITCHON", metaClassName); final MetaObject[] lwmos = SessionManager.getProxy() .getLightweightMetaObjectsByQuery(mc.getID(), SessionManager.getSession().getUser(), query, new String[] { "NAME" }, "%1$2s"); if (nullable) { model.addElement(null); } if (LOG.isDebugEnabled()) { LOG.debug(lwmos + "tags found for '" + metaClassName + "'"); } for (final MetaObject mo : lwmos) { model.addElement(mo); } } catch (Exception ex) { LOG.warn("Problem while loading the LightWeightMetaObjects.", ex); } this.setModel(model); if (model.getSize() > 0) { this.setSelectedIndex(0); } } }